今天介紹最後一個關聯式資料庫 SQL 的語法 — View,所以篇幅也會稍短。
我們再第六天有提到 Subquery,每個SQL段落中都可以查入子查詢。缺點是寫起來會很亂,而且常常同一段子查詢要重複寫。這時候就可以使用 Views。讀者你可以把她想成是命名好的查詢,也可以想像成虛擬表格。
他的語法很單純,就是在 Select — From — Where 之前加上 Create View ... As
Create View highPriceProduct As
Select menuid, item, price, typename
from menu natural join foodtype
where price > 40;
(對他不會回傳~因為它是一個指令)
這等於是把下面的查詢命名叫做 highPriceProduct。
我們就可以在往後的 SQL 中把他想像成一個傳存的表格。但是這個關係表沒有存在資料庫喔! 他存的是你這段指令。
Select item
From highPriceProduct;
當運行到 highPriceProduct 的時候,SQL會去運行上面站存的那段指令。
這樣做有三個好處: 首先,使用View就可以讓閱讀和整理 SQL 不會很麻煩,也更容易可以除錯。在來,在資料庫管理系統中,我們可以設定不同權限的人只能看到或使用特定的Views。這樣就不會把我實際的資料暴露在風險當中。最後是我們可以用同一個資料庫創造出不同版本的虛擬關係表。
假設今天這間商店有美國和台灣的菜單,價格一樣但是幣值不同,這時候我就可以這樣創造一個做美國資料分析時使用的 View:
Create View menu_US As
Select menuid, item, price/30 as price, typeID, onSale
from menu;
代表往後當我在執行一樣的查詢的時候,我只要把原本台灣的menu 改成這個 view。不管我新增新的產品,改變台灣的售價,這個View 都可以直接幫我做好單位的轉換,我就不需要額外去管理一個欄位、管理一個關係表、或是在每次查詢時都要做數字轉換。
如果我們發現匯率變了,需要改View 的 SQL 可以使用
Alter View menu_US As
Select menuid, item, price/20 as price, typeID, onSale
from menu;
如果要刪除 Views
Drop View menu_us;
另外,MySQL Workbench 也會幫你把你創建過的View記起來。
很快的我們寫過了三分之一,過去十天我們先解釋了關聯式資料庫是什麼,然後有哪些重要的專有名詞跟關練。接著我們介紹了最常用的很多查詢方法和SQL語法: 基本查詢、群組資料、匯入更新資料庫、子查詢、等等。在有限的篇幅和時間內,我暫時還有沒解釋SQL的預存程式 (Stored Procedure)、觸發 (Trigger)、和函數 (Functions)。這部分就看後面有時間在另外補充囉!